-
Notifications
You must be signed in to change notification settings - Fork 15.3k
[flang][OpenMP] Rename some Type members in OpenMP clauses
#117784
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
Again, this simplifies the semantic checks and lowering quite a bit. Update the check for positive alignment to use a more informative message, and to highlight the modifier itsef, not the whole clause. Remove the checks for the allocator expression itself being positive: there is nothing in the spec that says that it should be positive. Remove the "simple" modifier from the AllocateT template, since both simple and complex modifiers are the same thing, only differing in syntax.
The intent is to keep names in sync with the terminology from the OpenMP spec: OmpBindClause::Type -> Binding OmpDefaultClause::Type -> DataSharingAttribute OmpDeviceTypeClause::Type -> DeviceTypeDescription OmpProcBindClause::Type -> AffinityPolicy Add more comments with references to the OpenMP specs.
|
@llvm/pr-subscribers-flang-fir-hlfir @llvm/pr-subscribers-flang-openmp Author: Krzysztof Parzyszek (kparzysz) ChangesThe intent is to keep names in sync with the terminology from the OpenMP spec: Add more comments with references to the OpenMP specs. Patch is 21.27 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/117784.diff 10 Files Affected:
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index d499b414827d50..e67b95ca61e8bf 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -513,7 +513,7 @@ class ParseTreeDumper {
NODE(parser, OmpDeclareTargetWithList)
NODE(parser, OmpDeclareMapperSpecifier)
NODE(parser, OmpDefaultClause)
- NODE_ENUM(OmpDefaultClause, Type)
+ NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
NODE(parser, OmpVariableCategory)
NODE_ENUM(OmpVariableCategory, Value)
NODE(parser, OmpDefaultmapClause)
@@ -573,9 +573,9 @@ class ParseTreeDumper {
NODE(parser, OmpNumTasksClause)
NODE_ENUM(OmpNumTasksClause, Prescriptiveness)
NODE(parser, OmpBindClause)
- NODE_ENUM(OmpBindClause, Type)
+ NODE_ENUM(OmpBindClause, Binding)
NODE(parser, OmpProcBindClause)
- NODE_ENUM(OmpProcBindClause, Type)
+ NODE_ENUM(OmpProcBindClause, AffinityPolicy)
NODE(parser, OmpReductionModifier)
NODE_ENUM(OmpReductionModifier, Value)
NODE(parser, OmpReductionClause)
@@ -596,7 +596,7 @@ class ParseTreeDumper {
NODE(parser, OmpDeviceClause)
NODE_ENUM(OmpDeviceClause, DeviceModifier)
NODE(parser, OmpDeviceTypeClause)
- NODE_ENUM(OmpDeviceTypeClause, Type)
+ NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
NODE(parser, OmpUpdateClause)
NODE(parser, OmpChunkModifier)
NODE_ENUM(OmpChunkModifier, Value)
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index e9a02a87812452..41b9ad1b7b0d61 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -3686,21 +3686,51 @@ struct OmpAllocateClause {
std::tuple<MODIFIERS(), OmpObjectList> t;
};
-// OMP 5.0 2.4 atomic-default-mem-order-clause ->
-// ATOMIC_DEFAULT_MEM_ORDER (SEQ_CST | ACQ_REL |
-// RELAXED)
+// Ref: [5.0:60-63], [5.1:83-86], [5.2:210-213]
+//
+// atomic-default-mem-order-clause ->
+// ATOMIC_DEFAULT_MEM_ORDER(memory-order) // since 5.0
+// memory-order ->
+// SEQ_CST | ACQ_REL | RELAXED | // since 5.0
+// ACQUIRE | RELEASE // since 5.2
struct OmpAtomicDefaultMemOrderClause {
- WRAPPER_CLASS_BOILERPLATE(
- OmpAtomicDefaultMemOrderClause, common::OmpAtomicDefaultMemOrderType);
+ using MemoryOrder = common::OmpAtomicDefaultMemOrderType;
+ WRAPPER_CLASS_BOILERPLATE(OmpAtomicDefaultMemOrderClause, MemoryOrder);
+};
+
+// Ref: [5.0:128-131], [5.1:151-154], [5.2:258-259]
+//
+// bind-clause ->
+// BIND(binding) // since 5.0
+// binding ->
+// TEAMS | PARALLEL | THREAD // since 5.0
+struct OmpBindClause {
+ ENUM_CLASS(Binding, Parallel, Teams, Thread)
+ WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Binding);
};
-// 2.15.3.1 default-clause -> DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
+// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:109]
+//
+// default-clause ->
+// DEFAULT(data-sharing-attribute) // since 4.5
+// data-sharing-attribute ->
+// SHARED | NONE | // since 4.5
+// PRIVATE | FIRSTPRIVATE // since 5.0
struct OmpDefaultClause {
- ENUM_CLASS(Type, Private, Firstprivate, Shared, None)
- WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, Type);
+ ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
+ WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, DataSharingAttribute);
};
-// 2.15.5.2 defaultmap -> DEFAULTMAP (implicit-behavior[:variable-category])
+// Ref: [4.5:103-107], [5.0:324-325], [5.1:357-358], [5.2:161-162]
+//
+// defaultmap-clause ->
+// DEFAULTMAP(implicit-behavior
+// [: variable-category]) // since 5.0
+// implicit-behavior ->
+// TOFROM | // since 4.5
+// ALLOC | TO | FROM | FIRSTPRIVATE | NONE |
+// DEFAULT | // since 5.0
+// PRESENT // since 5.1
struct OmpDefaultmapClause {
TUPLE_CLASS_BOILERPLATE(OmpDefaultmapClause);
ENUM_CLASS(
@@ -3709,23 +3739,35 @@ struct OmpDefaultmapClause {
std::tuple<ImplicitBehavior, MODIFIERS()> t;
};
-// 2.13.9 iteration-offset -> +/- non-negative-constant
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration-offset ->
+// +|- non-negative-constant // since 4.5
struct OmpIterationOffset {
TUPLE_CLASS_BOILERPLATE(OmpIterationOffset);
std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
};
-// 2.13.9 iteration -> induction-variable [iteration-offset]
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration ->
+// induction-variable [iteration-offset] // since 4.5
struct OmpIteration {
TUPLE_CLASS_BOILERPLATE(OmpIteration);
std::tuple<Name, std::optional<OmpIterationOffset>> t;
};
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration-vector ->
+// [iteration...] // since 4.5
WRAPPER_CLASS(OmpIterationVector, std::list<OmpIteration>);
// Extract this into a separate structure (instead of having it directly in
// OmpDoacrossClause), so that the context in TYPE_CONTEXT_PARSER can be set
// separately for OmpDependClause and OmpDoacrossClause.
+//
+// See: depend-clause, doacross-clause
struct OmpDoacross {
OmpDependenceType::Value GetDepType() const;
@@ -3735,15 +3777,15 @@ struct OmpDoacross {
std::variant<Sink, Source> u;
};
-// Ref: [4.5:169-170], [5.0:255-256], [5.1:288-289], [5.2:323-324]
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:323-326]
//
// depend-clause ->
-// DEPEND(SOURCE) | // since 4.5, until 5.1
-// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
+// DEPEND(SOURCE) | // since 4.5, until 5.1
+// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
// DEPEND([depend-modifier,]
-// task-dependence-type: locator-list) // since 4.5
+// task-dependence-type: locator-list) // since 4.5
//
-// depend-modifier -> iterator-modifier // since 5.0
+// depend-modifier -> iterator-modifier // since 5.0
struct OmpDependClause {
UNION_CLASS_BOILERPLATE(OmpDependClause);
struct TaskDep {
@@ -3755,6 +3797,10 @@ struct OmpDependClause {
std::variant<TaskDep, OmpDoacross> u;
};
+// Ref: [5.2:326-328]
+//
+// doacross-clause ->
+// DOACROSS(dependence-type: iteration-vector) // since 5.2
WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
// Ref: [5.0:254-255], [5.1:287-288], [5.2:73]
@@ -3764,25 +3810,41 @@ WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
// DESTROY(variable) // since 5.2
WRAPPER_CLASS(OmpDestroyClause, OmpObject);
-// device([ device-modifier :] scalar-integer-expression)
+// Ref: [5.0:135-140], [5.1:161-166], [5.2:265-266]
+//
+// detach-clause ->
+// DETACH(event-handle) // since 5.0
+struct OmpDetachClause {
+ WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
+};
+
+// Ref: [4.5:103-107], [5.0:170-176], [5.1:197-205], [5.2:276-277]
+//
+// device-clause ->
+// DEVICE(scalar-integer-expression) | // since 4.5
+// DEVICE([device-modifier:]
+// scalar-integer-expression) // since 5.0
struct OmpDeviceClause {
TUPLE_CLASS_BOILERPLATE(OmpDeviceClause);
ENUM_CLASS(DeviceModifier, Ancestor, Device_Num)
std::tuple<std::optional<DeviceModifier>, ScalarIntExpr> t;
};
-// device_type(any | host | nohost)
+// Ref: [5.0:180-185], [5.1:210-216], [5.2:275]
+//
+// device-type-clause ->
+// DEVICE_TYPE(ANY | HOST | NOHOST) // since 5.0
struct OmpDeviceTypeClause {
- ENUM_CLASS(Type, Any, Host, Nohost)
- WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, Type);
+ ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
+ WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, DeviceTypeDescription);
};
// Ref: [4.5:107-109], [5.0:176-180], [5.1:205-210], [5.2:167-168]
//
// from-clause ->
// FROM(locator-list) |
-// FROM(mapper-modifier: locator-list) | // since 5.0
-// FROM(motion-modifier[,] ...: locator-list) // since 5.1
+// FROM(mapper-modifier: locator-list) | // since 5.0
+// FROM(motion-modifier[,] ...: locator-list) // since 5.1
// motion-modifier ->
// PRESENT | mapper-modifier | iterator-modifier
struct OmpFromClause {
@@ -3806,11 +3868,6 @@ struct OmpIfClause {
std::tuple<std::optional<DirectiveNameModifier>, ScalarLogicalExpr> t;
};
-// OpenMPv5.2 12.5.2 detach-clause -> DETACH (event-handle)
-struct OmpDetachClause {
- WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
-};
-
// OMP 5.0 2.19.5.6 in_reduction-clause -> IN_REDUCTION (reduction-identifier:
// variable-name-list)
struct OmpInReductionClause {
@@ -3878,10 +3935,16 @@ struct OmpOrderClause {
std::tuple<MODIFIERS(), Ordering> t;
};
-// 2.5 proc-bind-clause -> PROC_BIND (MASTER | CLOSE | SPREAD)
+// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:229-230]
+//
+// proc-bind-clause ->
+// PROC_BIND(affinity-policy) // since 4.5
+// affinity-policy ->
+// CLOSE | PRIMARY | SPREAD | // since 4.5
+// MASTER // since 4.5, until 5.2
struct OmpProcBindClause {
- ENUM_CLASS(Type, Close, Master, Spread, Primary)
- WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, Type);
+ ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
+ WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, AffinityPolicy);
};
// Ref: [4.5:201-207], [5.0:300-302], [5.1:332-334], [5.2:134-137]
@@ -3945,13 +4008,6 @@ struct OmpUpdateClause {
std::variant<OmpDependenceType, OmpTaskDependenceType> u;
};
-// OMP 5.2 11.7.1 bind-clause ->
-// BIND( PARALLEL | TEAMS | THREAD )
-struct OmpBindClause {
- ENUM_CLASS(Type, Parallel, Teams, Thread)
- WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Type);
-};
-
// OpenMP Clauses
struct OmpClause {
UNION_CLASS_BOILERPLATE(OmpClause);
diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp
index ddc91ef2030bd7..6d09cab700fd6f 100644
--- a/flang/lib/Lower/OpenMP/Clauses.cpp
+++ b/flang/lib/Lower/OpenMP/Clauses.cpp
@@ -478,7 +478,7 @@ Bind make(const parser::OmpClause::Bind &inp,
using wrapped = parser::OmpBindClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, Bind::Binding,
+ convert, wrapped::Binding, Bind::Binding,
// clang-format off
MS(Teams, Teams)
MS(Parallel, Parallel)
@@ -523,7 +523,7 @@ Default make(const parser::OmpClause::Default &inp,
using wrapped = parser::OmpDefaultClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, Default::DataSharingAttribute,
+ convert, wrapped::DataSharingAttribute, Default::DataSharingAttribute,
// clang-format off
MS(Firstprivate, Firstprivate)
MS(None, None)
@@ -680,7 +680,8 @@ DeviceType make(const parser::OmpClause::DeviceType &inp,
using wrapped = parser::OmpDeviceTypeClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, DeviceType::DeviceTypeDescription,
+ convert, wrapped::DeviceTypeDescription,
+ DeviceType::DeviceTypeDescription,
// clang-format off
MS(Any, Any)
MS(Host, Host)
@@ -1142,7 +1143,7 @@ ProcBind make(const parser::OmpClause::ProcBind &inp,
using wrapped = parser::OmpProcBindClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, ProcBind::AffinityPolicy,
+ convert, wrapped::AffinityPolicy, ProcBind::AffinityPolicy,
// clang-format off
MS(Close, Close)
MS(Master, Master)
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index f231290932c122..873f7e93cd15e4 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -255,17 +255,18 @@ TYPE_PARSER(construct<OmpAffinityClause>(
// 2.15.3.1 DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
TYPE_PARSER(construct<OmpDefaultClause>(
- "PRIVATE" >> pure(OmpDefaultClause::Type::Private) ||
- "FIRSTPRIVATE" >> pure(OmpDefaultClause::Type::Firstprivate) ||
- "SHARED" >> pure(OmpDefaultClause::Type::Shared) ||
- "NONE" >> pure(OmpDefaultClause::Type::None)))
+ "PRIVATE" >> pure(OmpDefaultClause::DataSharingAttribute::Private) ||
+ "FIRSTPRIVATE" >>
+ pure(OmpDefaultClause::DataSharingAttribute::Firstprivate) ||
+ "SHARED" >> pure(OmpDefaultClause::DataSharingAttribute::Shared) ||
+ "NONE" >> pure(OmpDefaultClause::DataSharingAttribute::None)))
// 2.5 PROC_BIND (MASTER | CLOSE | PRIMARY | SPREAD)
TYPE_PARSER(construct<OmpProcBindClause>(
- "CLOSE" >> pure(OmpProcBindClause::Type::Close) ||
- "MASTER" >> pure(OmpProcBindClause::Type::Master) ||
- "PRIMARY" >> pure(OmpProcBindClause::Type::Primary) ||
- "SPREAD" >> pure(OmpProcBindClause::Type::Spread)))
+ "CLOSE" >> pure(OmpProcBindClause::AffinityPolicy::Close) ||
+ "MASTER" >> pure(OmpProcBindClause::AffinityPolicy::Master) ||
+ "PRIMARY" >> pure(OmpProcBindClause::AffinityPolicy::Primary) ||
+ "SPREAD" >> pure(OmpProcBindClause::AffinityPolicy::Spread)))
TYPE_PARSER(construct<OmpMapClause>(
applyFunction<OmpMapClause>(makeMobClause<true>,
@@ -311,9 +312,9 @@ TYPE_PARSER(construct<OmpDeviceClause>(
// device_type(any | host | nohost)
TYPE_PARSER(construct<OmpDeviceTypeClause>(
- "ANY" >> pure(OmpDeviceTypeClause::Type::Any) ||
- "HOST" >> pure(OmpDeviceTypeClause::Type::Host) ||
- "NOHOST" >> pure(OmpDeviceTypeClause::Type::Nohost)))
+ "ANY" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Any) ||
+ "HOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Host) ||
+ "NOHOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Nohost)))
// 2.12 IF (directive-name-modifier: scalar-logical-expr)
TYPE_PARSER(construct<OmpIfClause>(
@@ -432,9 +433,9 @@ TYPE_PARSER(construct<OmpLastprivateClause>(
// OMP 5.2 11.7.1 BIND ( PARALLEL | TEAMS | THREAD )
TYPE_PARSER(construct<OmpBindClause>(
- "PARALLEL" >> pure(OmpBindClause::Type::Parallel) ||
- "TEAMS" >> pure(OmpBindClause::Type::Teams) ||
- "THREAD" >> pure(OmpBindClause::Type::Thread)))
+ "PARALLEL" >> pure(OmpBindClause::Binding::Parallel) ||
+ "TEAMS" >> pure(OmpBindClause::Binding::Teams) ||
+ "THREAD" >> pure(OmpBindClause::Binding::Thread)))
TYPE_PARSER(
"ACQUIRE" >> construct<OmpClause>(construct<OmpClause::Acquire>()) ||
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index 192917512c17a2..58aaeb64d7ebc1 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -2820,9 +2820,9 @@ class UnparseVisitor {
WALK_NESTED_ENUM(InquireSpec::LogVar, Kind)
WALK_NESTED_ENUM(ProcedureStmt, Kind) // R1506
WALK_NESTED_ENUM(UseStmt, ModuleNature) // R1410
- WALK_NESTED_ENUM(OmpProcBindClause, Type) // OMP PROC_BIND
- WALK_NESTED_ENUM(OmpDefaultClause, Type) // OMP DEFAULT
- WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP DEFAULTMAP
+ WALK_NESTED_ENUM(OmpProcBindClause, AffinityPolicy) // OMP proc_bind
+ WALK_NESTED_ENUM(OmpDefaultClause, DataSharingAttribute) // OMP default
+ WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP defaultmap
WALK_NESTED_ENUM(OmpVariableCategory, Value) // OMP variable-category
WALK_NESTED_ENUM(
OmpLastprivateClause, LastprivateModifier) // OMP lastprivate-modifier
@@ -2832,7 +2832,8 @@ class UnparseVisitor {
WALK_NESTED_ENUM(OmpTaskDependenceType, Value) // OMP task-dependence-type
WALK_NESTED_ENUM(OmpScheduleClause, Kind) // OMP schedule-kind
WALK_NESTED_ENUM(OmpDeviceClause, DeviceModifier) // OMP device modifier
- WALK_NESTED_ENUM(OmpDeviceTypeClause, Type) // OMP DEVICE_TYPE
+ WALK_NESTED_ENUM(
+ OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type
WALK_NESTED_ENUM(OmpReductionModifier, Value) // OMP reduction-modifier
WALK_NESTED_ENUM(OmpExpectation, Value) // OMP motion-expectation
WALK_NESTED_ENUM(OmpIfClause, DirectiveNameModifier) // OMP directive-modifier
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index b49258da506ce6..013dcbaf0b0daa 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -428,7 +428,7 @@ void OmpStructureChecker::HasInvalidLoopBinding(
for (const auto &clause : clauseList.v) {
if (const auto *bindClause{
std::get_if<parser::OmpClause::Bind>(&clause.u)}) {
- if (bindClause->v.v != parser::OmpBindClause::Type::Teams) {
+ if (bindClause->v.v != parser::OmpBindClause::Binding::Teams) {
context_.Say(beginDir.source, msg);
}
}
@@ -1644,7 +1644,7 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
[&](const parser::OmpClause::DeviceType &deviceTypeClause) {
deviceTypeClauseFound = true;
if (deviceTypeClause.v.v !=
- parser::OmpDeviceTypeClause::Type::Host) {
+ parser::OmpDeviceTypeClause::DeviceTypeDescription::Host) {
// Function / subroutine explicitly marked as runnable by the
// target device.
deviceConstructFound_ = true;
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index 4f56356d879a40..573f216b848ad8 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -2023,16 +2023,16 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPAllocatorsConstruct &x) {
void OmpAttributeVisitor::Post(const parser::OmpDefaultClause &x) {
if (!dirContext_.empty()) {
switch (x.v) {
- case parser::OmpDefaultClause::Type::Private:
+ case parser::OmpDefaultClause::DataSharingAttribute::Private:
SetContextDefaultDSA(Symbol::Flag::OmpPrivate);
break;
- case parser::OmpDefaultClause::Type::Firstprivate:
+ case parser::OmpDefaultClause::DataSharingAttribute::Firstprivate:
SetContextDefaultDSA(Symbol::Flag::OmpFirstPrivate);
break;
- case parser::OmpDefaultClause::Type::Shared:
+ case parser::OmpDefaultClause::DataSharingAttribute::Shared:
SetContextDefaultDSA(Symbol::Flag::OmpShared);
break;
- case parser::OmpDefaultClause::Type::None:
+ case parser::OmpDefaultClause::DataSharingAttribute::None:
SetContextDefaultDSA(Symbol::Flag::OmpNone);
break;
}
diff --git a/flang/test/Parser/OpenMP/declare_target-device_type.f90 b/flang/test/Parser/OpenMP/declare_target-device_type.f90
index 40eb1c2fa4caee..b6903614a628ee 100644
--- a/flang/test/Parser/OpenMP/declare_target-device_type.f90
+++ b/flang/test/Parser/OpenMP/declare_target-device_type.f90
@@ -31,7 +31,7 @@ subroutine openmp_declare_target
end do
!PARSE-TREE: OpenMPDeclarativeConstruct -> OpenMPDeclareTargetConstruct
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Host
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Nohost
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Any
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Host
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Nohost
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Any
END subroutine openmp_declare_target
diff --git a/flang/test/Parser/OpenMP/proc-bind.f90 b/flang/test/Parser/OpenMP/proc-...
[truncated]
|
|
@llvm/pr-subscribers-flang-semantics Author: Krzysztof Parzyszek (kparzysz) ChangesThe intent is to keep names in sync with the terminology from the OpenMP spec: Add more comments with references to the OpenMP specs. Patch is 21.27 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/117784.diff 10 Files Affected:
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index d499b414827d50..e67b95ca61e8bf 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -513,7 +513,7 @@ class ParseTreeDumper {
NODE(parser, OmpDeclareTargetWithList)
NODE(parser, OmpDeclareMapperSpecifier)
NODE(parser, OmpDefaultClause)
- NODE_ENUM(OmpDefaultClause, Type)
+ NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
NODE(parser, OmpVariableCategory)
NODE_ENUM(OmpVariableCategory, Value)
NODE(parser, OmpDefaultmapClause)
@@ -573,9 +573,9 @@ class ParseTreeDumper {
NODE(parser, OmpNumTasksClause)
NODE_ENUM(OmpNumTasksClause, Prescriptiveness)
NODE(parser, OmpBindClause)
- NODE_ENUM(OmpBindClause, Type)
+ NODE_ENUM(OmpBindClause, Binding)
NODE(parser, OmpProcBindClause)
- NODE_ENUM(OmpProcBindClause, Type)
+ NODE_ENUM(OmpProcBindClause, AffinityPolicy)
NODE(parser, OmpReductionModifier)
NODE_ENUM(OmpReductionModifier, Value)
NODE(parser, OmpReductionClause)
@@ -596,7 +596,7 @@ class ParseTreeDumper {
NODE(parser, OmpDeviceClause)
NODE_ENUM(OmpDeviceClause, DeviceModifier)
NODE(parser, OmpDeviceTypeClause)
- NODE_ENUM(OmpDeviceTypeClause, Type)
+ NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
NODE(parser, OmpUpdateClause)
NODE(parser, OmpChunkModifier)
NODE_ENUM(OmpChunkModifier, Value)
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index e9a02a87812452..41b9ad1b7b0d61 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -3686,21 +3686,51 @@ struct OmpAllocateClause {
std::tuple<MODIFIERS(), OmpObjectList> t;
};
-// OMP 5.0 2.4 atomic-default-mem-order-clause ->
-// ATOMIC_DEFAULT_MEM_ORDER (SEQ_CST | ACQ_REL |
-// RELAXED)
+// Ref: [5.0:60-63], [5.1:83-86], [5.2:210-213]
+//
+// atomic-default-mem-order-clause ->
+// ATOMIC_DEFAULT_MEM_ORDER(memory-order) // since 5.0
+// memory-order ->
+// SEQ_CST | ACQ_REL | RELAXED | // since 5.0
+// ACQUIRE | RELEASE // since 5.2
struct OmpAtomicDefaultMemOrderClause {
- WRAPPER_CLASS_BOILERPLATE(
- OmpAtomicDefaultMemOrderClause, common::OmpAtomicDefaultMemOrderType);
+ using MemoryOrder = common::OmpAtomicDefaultMemOrderType;
+ WRAPPER_CLASS_BOILERPLATE(OmpAtomicDefaultMemOrderClause, MemoryOrder);
+};
+
+// Ref: [5.0:128-131], [5.1:151-154], [5.2:258-259]
+//
+// bind-clause ->
+// BIND(binding) // since 5.0
+// binding ->
+// TEAMS | PARALLEL | THREAD // since 5.0
+struct OmpBindClause {
+ ENUM_CLASS(Binding, Parallel, Teams, Thread)
+ WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Binding);
};
-// 2.15.3.1 default-clause -> DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
+// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:109]
+//
+// default-clause ->
+// DEFAULT(data-sharing-attribute) // since 4.5
+// data-sharing-attribute ->
+// SHARED | NONE | // since 4.5
+// PRIVATE | FIRSTPRIVATE // since 5.0
struct OmpDefaultClause {
- ENUM_CLASS(Type, Private, Firstprivate, Shared, None)
- WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, Type);
+ ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
+ WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, DataSharingAttribute);
};
-// 2.15.5.2 defaultmap -> DEFAULTMAP (implicit-behavior[:variable-category])
+// Ref: [4.5:103-107], [5.0:324-325], [5.1:357-358], [5.2:161-162]
+//
+// defaultmap-clause ->
+// DEFAULTMAP(implicit-behavior
+// [: variable-category]) // since 5.0
+// implicit-behavior ->
+// TOFROM | // since 4.5
+// ALLOC | TO | FROM | FIRSTPRIVATE | NONE |
+// DEFAULT | // since 5.0
+// PRESENT // since 5.1
struct OmpDefaultmapClause {
TUPLE_CLASS_BOILERPLATE(OmpDefaultmapClause);
ENUM_CLASS(
@@ -3709,23 +3739,35 @@ struct OmpDefaultmapClause {
std::tuple<ImplicitBehavior, MODIFIERS()> t;
};
-// 2.13.9 iteration-offset -> +/- non-negative-constant
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration-offset ->
+// +|- non-negative-constant // since 4.5
struct OmpIterationOffset {
TUPLE_CLASS_BOILERPLATE(OmpIterationOffset);
std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
};
-// 2.13.9 iteration -> induction-variable [iteration-offset]
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration ->
+// induction-variable [iteration-offset] // since 4.5
struct OmpIteration {
TUPLE_CLASS_BOILERPLATE(OmpIteration);
std::tuple<Name, std::optional<OmpIterationOffset>> t;
};
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration-vector ->
+// [iteration...] // since 4.5
WRAPPER_CLASS(OmpIterationVector, std::list<OmpIteration>);
// Extract this into a separate structure (instead of having it directly in
// OmpDoacrossClause), so that the context in TYPE_CONTEXT_PARSER can be set
// separately for OmpDependClause and OmpDoacrossClause.
+//
+// See: depend-clause, doacross-clause
struct OmpDoacross {
OmpDependenceType::Value GetDepType() const;
@@ -3735,15 +3777,15 @@ struct OmpDoacross {
std::variant<Sink, Source> u;
};
-// Ref: [4.5:169-170], [5.0:255-256], [5.1:288-289], [5.2:323-324]
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:323-326]
//
// depend-clause ->
-// DEPEND(SOURCE) | // since 4.5, until 5.1
-// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
+// DEPEND(SOURCE) | // since 4.5, until 5.1
+// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
// DEPEND([depend-modifier,]
-// task-dependence-type: locator-list) // since 4.5
+// task-dependence-type: locator-list) // since 4.5
//
-// depend-modifier -> iterator-modifier // since 5.0
+// depend-modifier -> iterator-modifier // since 5.0
struct OmpDependClause {
UNION_CLASS_BOILERPLATE(OmpDependClause);
struct TaskDep {
@@ -3755,6 +3797,10 @@ struct OmpDependClause {
std::variant<TaskDep, OmpDoacross> u;
};
+// Ref: [5.2:326-328]
+//
+// doacross-clause ->
+// DOACROSS(dependence-type: iteration-vector) // since 5.2
WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
// Ref: [5.0:254-255], [5.1:287-288], [5.2:73]
@@ -3764,25 +3810,41 @@ WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
// DESTROY(variable) // since 5.2
WRAPPER_CLASS(OmpDestroyClause, OmpObject);
-// device([ device-modifier :] scalar-integer-expression)
+// Ref: [5.0:135-140], [5.1:161-166], [5.2:265-266]
+//
+// detach-clause ->
+// DETACH(event-handle) // since 5.0
+struct OmpDetachClause {
+ WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
+};
+
+// Ref: [4.5:103-107], [5.0:170-176], [5.1:197-205], [5.2:276-277]
+//
+// device-clause ->
+// DEVICE(scalar-integer-expression) | // since 4.5
+// DEVICE([device-modifier:]
+// scalar-integer-expression) // since 5.0
struct OmpDeviceClause {
TUPLE_CLASS_BOILERPLATE(OmpDeviceClause);
ENUM_CLASS(DeviceModifier, Ancestor, Device_Num)
std::tuple<std::optional<DeviceModifier>, ScalarIntExpr> t;
};
-// device_type(any | host | nohost)
+// Ref: [5.0:180-185], [5.1:210-216], [5.2:275]
+//
+// device-type-clause ->
+// DEVICE_TYPE(ANY | HOST | NOHOST) // since 5.0
struct OmpDeviceTypeClause {
- ENUM_CLASS(Type, Any, Host, Nohost)
- WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, Type);
+ ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
+ WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, DeviceTypeDescription);
};
// Ref: [4.5:107-109], [5.0:176-180], [5.1:205-210], [5.2:167-168]
//
// from-clause ->
// FROM(locator-list) |
-// FROM(mapper-modifier: locator-list) | // since 5.0
-// FROM(motion-modifier[,] ...: locator-list) // since 5.1
+// FROM(mapper-modifier: locator-list) | // since 5.0
+// FROM(motion-modifier[,] ...: locator-list) // since 5.1
// motion-modifier ->
// PRESENT | mapper-modifier | iterator-modifier
struct OmpFromClause {
@@ -3806,11 +3868,6 @@ struct OmpIfClause {
std::tuple<std::optional<DirectiveNameModifier>, ScalarLogicalExpr> t;
};
-// OpenMPv5.2 12.5.2 detach-clause -> DETACH (event-handle)
-struct OmpDetachClause {
- WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
-};
-
// OMP 5.0 2.19.5.6 in_reduction-clause -> IN_REDUCTION (reduction-identifier:
// variable-name-list)
struct OmpInReductionClause {
@@ -3878,10 +3935,16 @@ struct OmpOrderClause {
std::tuple<MODIFIERS(), Ordering> t;
};
-// 2.5 proc-bind-clause -> PROC_BIND (MASTER | CLOSE | SPREAD)
+// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:229-230]
+//
+// proc-bind-clause ->
+// PROC_BIND(affinity-policy) // since 4.5
+// affinity-policy ->
+// CLOSE | PRIMARY | SPREAD | // since 4.5
+// MASTER // since 4.5, until 5.2
struct OmpProcBindClause {
- ENUM_CLASS(Type, Close, Master, Spread, Primary)
- WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, Type);
+ ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
+ WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, AffinityPolicy);
};
// Ref: [4.5:201-207], [5.0:300-302], [5.1:332-334], [5.2:134-137]
@@ -3945,13 +4008,6 @@ struct OmpUpdateClause {
std::variant<OmpDependenceType, OmpTaskDependenceType> u;
};
-// OMP 5.2 11.7.1 bind-clause ->
-// BIND( PARALLEL | TEAMS | THREAD )
-struct OmpBindClause {
- ENUM_CLASS(Type, Parallel, Teams, Thread)
- WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Type);
-};
-
// OpenMP Clauses
struct OmpClause {
UNION_CLASS_BOILERPLATE(OmpClause);
diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp
index ddc91ef2030bd7..6d09cab700fd6f 100644
--- a/flang/lib/Lower/OpenMP/Clauses.cpp
+++ b/flang/lib/Lower/OpenMP/Clauses.cpp
@@ -478,7 +478,7 @@ Bind make(const parser::OmpClause::Bind &inp,
using wrapped = parser::OmpBindClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, Bind::Binding,
+ convert, wrapped::Binding, Bind::Binding,
// clang-format off
MS(Teams, Teams)
MS(Parallel, Parallel)
@@ -523,7 +523,7 @@ Default make(const parser::OmpClause::Default &inp,
using wrapped = parser::OmpDefaultClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, Default::DataSharingAttribute,
+ convert, wrapped::DataSharingAttribute, Default::DataSharingAttribute,
// clang-format off
MS(Firstprivate, Firstprivate)
MS(None, None)
@@ -680,7 +680,8 @@ DeviceType make(const parser::OmpClause::DeviceType &inp,
using wrapped = parser::OmpDeviceTypeClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, DeviceType::DeviceTypeDescription,
+ convert, wrapped::DeviceTypeDescription,
+ DeviceType::DeviceTypeDescription,
// clang-format off
MS(Any, Any)
MS(Host, Host)
@@ -1142,7 +1143,7 @@ ProcBind make(const parser::OmpClause::ProcBind &inp,
using wrapped = parser::OmpProcBindClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, ProcBind::AffinityPolicy,
+ convert, wrapped::AffinityPolicy, ProcBind::AffinityPolicy,
// clang-format off
MS(Close, Close)
MS(Master, Master)
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index f231290932c122..873f7e93cd15e4 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -255,17 +255,18 @@ TYPE_PARSER(construct<OmpAffinityClause>(
// 2.15.3.1 DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
TYPE_PARSER(construct<OmpDefaultClause>(
- "PRIVATE" >> pure(OmpDefaultClause::Type::Private) ||
- "FIRSTPRIVATE" >> pure(OmpDefaultClause::Type::Firstprivate) ||
- "SHARED" >> pure(OmpDefaultClause::Type::Shared) ||
- "NONE" >> pure(OmpDefaultClause::Type::None)))
+ "PRIVATE" >> pure(OmpDefaultClause::DataSharingAttribute::Private) ||
+ "FIRSTPRIVATE" >>
+ pure(OmpDefaultClause::DataSharingAttribute::Firstprivate) ||
+ "SHARED" >> pure(OmpDefaultClause::DataSharingAttribute::Shared) ||
+ "NONE" >> pure(OmpDefaultClause::DataSharingAttribute::None)))
// 2.5 PROC_BIND (MASTER | CLOSE | PRIMARY | SPREAD)
TYPE_PARSER(construct<OmpProcBindClause>(
- "CLOSE" >> pure(OmpProcBindClause::Type::Close) ||
- "MASTER" >> pure(OmpProcBindClause::Type::Master) ||
- "PRIMARY" >> pure(OmpProcBindClause::Type::Primary) ||
- "SPREAD" >> pure(OmpProcBindClause::Type::Spread)))
+ "CLOSE" >> pure(OmpProcBindClause::AffinityPolicy::Close) ||
+ "MASTER" >> pure(OmpProcBindClause::AffinityPolicy::Master) ||
+ "PRIMARY" >> pure(OmpProcBindClause::AffinityPolicy::Primary) ||
+ "SPREAD" >> pure(OmpProcBindClause::AffinityPolicy::Spread)))
TYPE_PARSER(construct<OmpMapClause>(
applyFunction<OmpMapClause>(makeMobClause<true>,
@@ -311,9 +312,9 @@ TYPE_PARSER(construct<OmpDeviceClause>(
// device_type(any | host | nohost)
TYPE_PARSER(construct<OmpDeviceTypeClause>(
- "ANY" >> pure(OmpDeviceTypeClause::Type::Any) ||
- "HOST" >> pure(OmpDeviceTypeClause::Type::Host) ||
- "NOHOST" >> pure(OmpDeviceTypeClause::Type::Nohost)))
+ "ANY" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Any) ||
+ "HOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Host) ||
+ "NOHOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Nohost)))
// 2.12 IF (directive-name-modifier: scalar-logical-expr)
TYPE_PARSER(construct<OmpIfClause>(
@@ -432,9 +433,9 @@ TYPE_PARSER(construct<OmpLastprivateClause>(
// OMP 5.2 11.7.1 BIND ( PARALLEL | TEAMS | THREAD )
TYPE_PARSER(construct<OmpBindClause>(
- "PARALLEL" >> pure(OmpBindClause::Type::Parallel) ||
- "TEAMS" >> pure(OmpBindClause::Type::Teams) ||
- "THREAD" >> pure(OmpBindClause::Type::Thread)))
+ "PARALLEL" >> pure(OmpBindClause::Binding::Parallel) ||
+ "TEAMS" >> pure(OmpBindClause::Binding::Teams) ||
+ "THREAD" >> pure(OmpBindClause::Binding::Thread)))
TYPE_PARSER(
"ACQUIRE" >> construct<OmpClause>(construct<OmpClause::Acquire>()) ||
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index 192917512c17a2..58aaeb64d7ebc1 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -2820,9 +2820,9 @@ class UnparseVisitor {
WALK_NESTED_ENUM(InquireSpec::LogVar, Kind)
WALK_NESTED_ENUM(ProcedureStmt, Kind) // R1506
WALK_NESTED_ENUM(UseStmt, ModuleNature) // R1410
- WALK_NESTED_ENUM(OmpProcBindClause, Type) // OMP PROC_BIND
- WALK_NESTED_ENUM(OmpDefaultClause, Type) // OMP DEFAULT
- WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP DEFAULTMAP
+ WALK_NESTED_ENUM(OmpProcBindClause, AffinityPolicy) // OMP proc_bind
+ WALK_NESTED_ENUM(OmpDefaultClause, DataSharingAttribute) // OMP default
+ WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP defaultmap
WALK_NESTED_ENUM(OmpVariableCategory, Value) // OMP variable-category
WALK_NESTED_ENUM(
OmpLastprivateClause, LastprivateModifier) // OMP lastprivate-modifier
@@ -2832,7 +2832,8 @@ class UnparseVisitor {
WALK_NESTED_ENUM(OmpTaskDependenceType, Value) // OMP task-dependence-type
WALK_NESTED_ENUM(OmpScheduleClause, Kind) // OMP schedule-kind
WALK_NESTED_ENUM(OmpDeviceClause, DeviceModifier) // OMP device modifier
- WALK_NESTED_ENUM(OmpDeviceTypeClause, Type) // OMP DEVICE_TYPE
+ WALK_NESTED_ENUM(
+ OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type
WALK_NESTED_ENUM(OmpReductionModifier, Value) // OMP reduction-modifier
WALK_NESTED_ENUM(OmpExpectation, Value) // OMP motion-expectation
WALK_NESTED_ENUM(OmpIfClause, DirectiveNameModifier) // OMP directive-modifier
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index b49258da506ce6..013dcbaf0b0daa 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -428,7 +428,7 @@ void OmpStructureChecker::HasInvalidLoopBinding(
for (const auto &clause : clauseList.v) {
if (const auto *bindClause{
std::get_if<parser::OmpClause::Bind>(&clause.u)}) {
- if (bindClause->v.v != parser::OmpBindClause::Type::Teams) {
+ if (bindClause->v.v != parser::OmpBindClause::Binding::Teams) {
context_.Say(beginDir.source, msg);
}
}
@@ -1644,7 +1644,7 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
[&](const parser::OmpClause::DeviceType &deviceTypeClause) {
deviceTypeClauseFound = true;
if (deviceTypeClause.v.v !=
- parser::OmpDeviceTypeClause::Type::Host) {
+ parser::OmpDeviceTypeClause::DeviceTypeDescription::Host) {
// Function / subroutine explicitly marked as runnable by the
// target device.
deviceConstructFound_ = true;
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index 4f56356d879a40..573f216b848ad8 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -2023,16 +2023,16 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPAllocatorsConstruct &x) {
void OmpAttributeVisitor::Post(const parser::OmpDefaultClause &x) {
if (!dirContext_.empty()) {
switch (x.v) {
- case parser::OmpDefaultClause::Type::Private:
+ case parser::OmpDefaultClause::DataSharingAttribute::Private:
SetContextDefaultDSA(Symbol::Flag::OmpPrivate);
break;
- case parser::OmpDefaultClause::Type::Firstprivate:
+ case parser::OmpDefaultClause::DataSharingAttribute::Firstprivate:
SetContextDefaultDSA(Symbol::Flag::OmpFirstPrivate);
break;
- case parser::OmpDefaultClause::Type::Shared:
+ case parser::OmpDefaultClause::DataSharingAttribute::Shared:
SetContextDefaultDSA(Symbol::Flag::OmpShared);
break;
- case parser::OmpDefaultClause::Type::None:
+ case parser::OmpDefaultClause::DataSharingAttribute::None:
SetContextDefaultDSA(Symbol::Flag::OmpNone);
break;
}
diff --git a/flang/test/Parser/OpenMP/declare_target-device_type.f90 b/flang/test/Parser/OpenMP/declare_target-device_type.f90
index 40eb1c2fa4caee..b6903614a628ee 100644
--- a/flang/test/Parser/OpenMP/declare_target-device_type.f90
+++ b/flang/test/Parser/OpenMP/declare_target-device_type.f90
@@ -31,7 +31,7 @@ subroutine openmp_declare_target
end do
!PARSE-TREE: OpenMPDeclarativeConstruct -> OpenMPDeclareTargetConstruct
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Host
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Nohost
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Any
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Host
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Nohost
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Any
END subroutine openmp_declare_target
diff --git a/flang/test/Parser/OpenMP/proc-bind.f90 b/flang/test/Parser/OpenMP/proc-...
[truncated]
|
|
@llvm/pr-subscribers-flang-parser Author: Krzysztof Parzyszek (kparzysz) ChangesThe intent is to keep names in sync with the terminology from the OpenMP spec: Add more comments with references to the OpenMP specs. Patch is 21.27 KiB, truncated to 20.00 KiB below, full version: https://github.com/llvm/llvm-project/pull/117784.diff 10 Files Affected:
diff --git a/flang/include/flang/Parser/dump-parse-tree.h b/flang/include/flang/Parser/dump-parse-tree.h
index d499b414827d50..e67b95ca61e8bf 100644
--- a/flang/include/flang/Parser/dump-parse-tree.h
+++ b/flang/include/flang/Parser/dump-parse-tree.h
@@ -513,7 +513,7 @@ class ParseTreeDumper {
NODE(parser, OmpDeclareTargetWithList)
NODE(parser, OmpDeclareMapperSpecifier)
NODE(parser, OmpDefaultClause)
- NODE_ENUM(OmpDefaultClause, Type)
+ NODE_ENUM(OmpDefaultClause, DataSharingAttribute)
NODE(parser, OmpVariableCategory)
NODE_ENUM(OmpVariableCategory, Value)
NODE(parser, OmpDefaultmapClause)
@@ -573,9 +573,9 @@ class ParseTreeDumper {
NODE(parser, OmpNumTasksClause)
NODE_ENUM(OmpNumTasksClause, Prescriptiveness)
NODE(parser, OmpBindClause)
- NODE_ENUM(OmpBindClause, Type)
+ NODE_ENUM(OmpBindClause, Binding)
NODE(parser, OmpProcBindClause)
- NODE_ENUM(OmpProcBindClause, Type)
+ NODE_ENUM(OmpProcBindClause, AffinityPolicy)
NODE(parser, OmpReductionModifier)
NODE_ENUM(OmpReductionModifier, Value)
NODE(parser, OmpReductionClause)
@@ -596,7 +596,7 @@ class ParseTreeDumper {
NODE(parser, OmpDeviceClause)
NODE_ENUM(OmpDeviceClause, DeviceModifier)
NODE(parser, OmpDeviceTypeClause)
- NODE_ENUM(OmpDeviceTypeClause, Type)
+ NODE_ENUM(OmpDeviceTypeClause, DeviceTypeDescription)
NODE(parser, OmpUpdateClause)
NODE(parser, OmpChunkModifier)
NODE_ENUM(OmpChunkModifier, Value)
diff --git a/flang/include/flang/Parser/parse-tree.h b/flang/include/flang/Parser/parse-tree.h
index e9a02a87812452..41b9ad1b7b0d61 100644
--- a/flang/include/flang/Parser/parse-tree.h
+++ b/flang/include/flang/Parser/parse-tree.h
@@ -3686,21 +3686,51 @@ struct OmpAllocateClause {
std::tuple<MODIFIERS(), OmpObjectList> t;
};
-// OMP 5.0 2.4 atomic-default-mem-order-clause ->
-// ATOMIC_DEFAULT_MEM_ORDER (SEQ_CST | ACQ_REL |
-// RELAXED)
+// Ref: [5.0:60-63], [5.1:83-86], [5.2:210-213]
+//
+// atomic-default-mem-order-clause ->
+// ATOMIC_DEFAULT_MEM_ORDER(memory-order) // since 5.0
+// memory-order ->
+// SEQ_CST | ACQ_REL | RELAXED | // since 5.0
+// ACQUIRE | RELEASE // since 5.2
struct OmpAtomicDefaultMemOrderClause {
- WRAPPER_CLASS_BOILERPLATE(
- OmpAtomicDefaultMemOrderClause, common::OmpAtomicDefaultMemOrderType);
+ using MemoryOrder = common::OmpAtomicDefaultMemOrderType;
+ WRAPPER_CLASS_BOILERPLATE(OmpAtomicDefaultMemOrderClause, MemoryOrder);
+};
+
+// Ref: [5.0:128-131], [5.1:151-154], [5.2:258-259]
+//
+// bind-clause ->
+// BIND(binding) // since 5.0
+// binding ->
+// TEAMS | PARALLEL | THREAD // since 5.0
+struct OmpBindClause {
+ ENUM_CLASS(Binding, Parallel, Teams, Thread)
+ WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Binding);
};
-// 2.15.3.1 default-clause -> DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
+// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:109]
+//
+// default-clause ->
+// DEFAULT(data-sharing-attribute) // since 4.5
+// data-sharing-attribute ->
+// SHARED | NONE | // since 4.5
+// PRIVATE | FIRSTPRIVATE // since 5.0
struct OmpDefaultClause {
- ENUM_CLASS(Type, Private, Firstprivate, Shared, None)
- WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, Type);
+ ENUM_CLASS(DataSharingAttribute, Private, Firstprivate, Shared, None)
+ WRAPPER_CLASS_BOILERPLATE(OmpDefaultClause, DataSharingAttribute);
};
-// 2.15.5.2 defaultmap -> DEFAULTMAP (implicit-behavior[:variable-category])
+// Ref: [4.5:103-107], [5.0:324-325], [5.1:357-358], [5.2:161-162]
+//
+// defaultmap-clause ->
+// DEFAULTMAP(implicit-behavior
+// [: variable-category]) // since 5.0
+// implicit-behavior ->
+// TOFROM | // since 4.5
+// ALLOC | TO | FROM | FIRSTPRIVATE | NONE |
+// DEFAULT | // since 5.0
+// PRESENT // since 5.1
struct OmpDefaultmapClause {
TUPLE_CLASS_BOILERPLATE(OmpDefaultmapClause);
ENUM_CLASS(
@@ -3709,23 +3739,35 @@ struct OmpDefaultmapClause {
std::tuple<ImplicitBehavior, MODIFIERS()> t;
};
-// 2.13.9 iteration-offset -> +/- non-negative-constant
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration-offset ->
+// +|- non-negative-constant // since 4.5
struct OmpIterationOffset {
TUPLE_CLASS_BOILERPLATE(OmpIterationOffset);
std::tuple<DefinedOperator, ScalarIntConstantExpr> t;
};
-// 2.13.9 iteration -> induction-variable [iteration-offset]
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration ->
+// induction-variable [iteration-offset] // since 4.5
struct OmpIteration {
TUPLE_CLASS_BOILERPLATE(OmpIteration);
std::tuple<Name, std::optional<OmpIterationOffset>> t;
};
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:91-93]
+//
+// iteration-vector ->
+// [iteration...] // since 4.5
WRAPPER_CLASS(OmpIterationVector, std::list<OmpIteration>);
// Extract this into a separate structure (instead of having it directly in
// OmpDoacrossClause), so that the context in TYPE_CONTEXT_PARSER can be set
// separately for OmpDependClause and OmpDoacrossClause.
+//
+// See: depend-clause, doacross-clause
struct OmpDoacross {
OmpDependenceType::Value GetDepType() const;
@@ -3735,15 +3777,15 @@ struct OmpDoacross {
std::variant<Sink, Source> u;
};
-// Ref: [4.5:169-170], [5.0:255-256], [5.1:288-289], [5.2:323-324]
+// Ref: [4.5:169-172], [5.0:255-259], [5.1:288-292], [5.2:323-326]
//
// depend-clause ->
-// DEPEND(SOURCE) | // since 4.5, until 5.1
-// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
+// DEPEND(SOURCE) | // since 4.5, until 5.1
+// DEPEND(SINK: iteration-vector) | // since 4.5, until 5.1
// DEPEND([depend-modifier,]
-// task-dependence-type: locator-list) // since 4.5
+// task-dependence-type: locator-list) // since 4.5
//
-// depend-modifier -> iterator-modifier // since 5.0
+// depend-modifier -> iterator-modifier // since 5.0
struct OmpDependClause {
UNION_CLASS_BOILERPLATE(OmpDependClause);
struct TaskDep {
@@ -3755,6 +3797,10 @@ struct OmpDependClause {
std::variant<TaskDep, OmpDoacross> u;
};
+// Ref: [5.2:326-328]
+//
+// doacross-clause ->
+// DOACROSS(dependence-type: iteration-vector) // since 5.2
WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
// Ref: [5.0:254-255], [5.1:287-288], [5.2:73]
@@ -3764,25 +3810,41 @@ WRAPPER_CLASS(OmpDoacrossClause, OmpDoacross);
// DESTROY(variable) // since 5.2
WRAPPER_CLASS(OmpDestroyClause, OmpObject);
-// device([ device-modifier :] scalar-integer-expression)
+// Ref: [5.0:135-140], [5.1:161-166], [5.2:265-266]
+//
+// detach-clause ->
+// DETACH(event-handle) // since 5.0
+struct OmpDetachClause {
+ WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
+};
+
+// Ref: [4.5:103-107], [5.0:170-176], [5.1:197-205], [5.2:276-277]
+//
+// device-clause ->
+// DEVICE(scalar-integer-expression) | // since 4.5
+// DEVICE([device-modifier:]
+// scalar-integer-expression) // since 5.0
struct OmpDeviceClause {
TUPLE_CLASS_BOILERPLATE(OmpDeviceClause);
ENUM_CLASS(DeviceModifier, Ancestor, Device_Num)
std::tuple<std::optional<DeviceModifier>, ScalarIntExpr> t;
};
-// device_type(any | host | nohost)
+// Ref: [5.0:180-185], [5.1:210-216], [5.2:275]
+//
+// device-type-clause ->
+// DEVICE_TYPE(ANY | HOST | NOHOST) // since 5.0
struct OmpDeviceTypeClause {
- ENUM_CLASS(Type, Any, Host, Nohost)
- WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, Type);
+ ENUM_CLASS(DeviceTypeDescription, Any, Host, Nohost)
+ WRAPPER_CLASS_BOILERPLATE(OmpDeviceTypeClause, DeviceTypeDescription);
};
// Ref: [4.5:107-109], [5.0:176-180], [5.1:205-210], [5.2:167-168]
//
// from-clause ->
// FROM(locator-list) |
-// FROM(mapper-modifier: locator-list) | // since 5.0
-// FROM(motion-modifier[,] ...: locator-list) // since 5.1
+// FROM(mapper-modifier: locator-list) | // since 5.0
+// FROM(motion-modifier[,] ...: locator-list) // since 5.1
// motion-modifier ->
// PRESENT | mapper-modifier | iterator-modifier
struct OmpFromClause {
@@ -3806,11 +3868,6 @@ struct OmpIfClause {
std::tuple<std::optional<DirectiveNameModifier>, ScalarLogicalExpr> t;
};
-// OpenMPv5.2 12.5.2 detach-clause -> DETACH (event-handle)
-struct OmpDetachClause {
- WRAPPER_CLASS_BOILERPLATE(OmpDetachClause, OmpObject);
-};
-
// OMP 5.0 2.19.5.6 in_reduction-clause -> IN_REDUCTION (reduction-identifier:
// variable-name-list)
struct OmpInReductionClause {
@@ -3878,10 +3935,16 @@ struct OmpOrderClause {
std::tuple<MODIFIERS(), Ordering> t;
};
-// 2.5 proc-bind-clause -> PROC_BIND (MASTER | CLOSE | SPREAD)
+// Ref: [4.5:46-50], [5.0:74-78], [5.1:92-96], [5.2:229-230]
+//
+// proc-bind-clause ->
+// PROC_BIND(affinity-policy) // since 4.5
+// affinity-policy ->
+// CLOSE | PRIMARY | SPREAD | // since 4.5
+// MASTER // since 4.5, until 5.2
struct OmpProcBindClause {
- ENUM_CLASS(Type, Close, Master, Spread, Primary)
- WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, Type);
+ ENUM_CLASS(AffinityPolicy, Close, Master, Spread, Primary)
+ WRAPPER_CLASS_BOILERPLATE(OmpProcBindClause, AffinityPolicy);
};
// Ref: [4.5:201-207], [5.0:300-302], [5.1:332-334], [5.2:134-137]
@@ -3945,13 +4008,6 @@ struct OmpUpdateClause {
std::variant<OmpDependenceType, OmpTaskDependenceType> u;
};
-// OMP 5.2 11.7.1 bind-clause ->
-// BIND( PARALLEL | TEAMS | THREAD )
-struct OmpBindClause {
- ENUM_CLASS(Type, Parallel, Teams, Thread)
- WRAPPER_CLASS_BOILERPLATE(OmpBindClause, Type);
-};
-
// OpenMP Clauses
struct OmpClause {
UNION_CLASS_BOILERPLATE(OmpClause);
diff --git a/flang/lib/Lower/OpenMP/Clauses.cpp b/flang/lib/Lower/OpenMP/Clauses.cpp
index ddc91ef2030bd7..6d09cab700fd6f 100644
--- a/flang/lib/Lower/OpenMP/Clauses.cpp
+++ b/flang/lib/Lower/OpenMP/Clauses.cpp
@@ -478,7 +478,7 @@ Bind make(const parser::OmpClause::Bind &inp,
using wrapped = parser::OmpBindClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, Bind::Binding,
+ convert, wrapped::Binding, Bind::Binding,
// clang-format off
MS(Teams, Teams)
MS(Parallel, Parallel)
@@ -523,7 +523,7 @@ Default make(const parser::OmpClause::Default &inp,
using wrapped = parser::OmpDefaultClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, Default::DataSharingAttribute,
+ convert, wrapped::DataSharingAttribute, Default::DataSharingAttribute,
// clang-format off
MS(Firstprivate, Firstprivate)
MS(None, None)
@@ -680,7 +680,8 @@ DeviceType make(const parser::OmpClause::DeviceType &inp,
using wrapped = parser::OmpDeviceTypeClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, DeviceType::DeviceTypeDescription,
+ convert, wrapped::DeviceTypeDescription,
+ DeviceType::DeviceTypeDescription,
// clang-format off
MS(Any, Any)
MS(Host, Host)
@@ -1142,7 +1143,7 @@ ProcBind make(const parser::OmpClause::ProcBind &inp,
using wrapped = parser::OmpProcBindClause;
CLAUSET_ENUM_CONVERT( //
- convert, wrapped::Type, ProcBind::AffinityPolicy,
+ convert, wrapped::AffinityPolicy, ProcBind::AffinityPolicy,
// clang-format off
MS(Close, Close)
MS(Master, Master)
diff --git a/flang/lib/Parser/openmp-parsers.cpp b/flang/lib/Parser/openmp-parsers.cpp
index f231290932c122..873f7e93cd15e4 100644
--- a/flang/lib/Parser/openmp-parsers.cpp
+++ b/flang/lib/Parser/openmp-parsers.cpp
@@ -255,17 +255,18 @@ TYPE_PARSER(construct<OmpAffinityClause>(
// 2.15.3.1 DEFAULT (PRIVATE | FIRSTPRIVATE | SHARED | NONE)
TYPE_PARSER(construct<OmpDefaultClause>(
- "PRIVATE" >> pure(OmpDefaultClause::Type::Private) ||
- "FIRSTPRIVATE" >> pure(OmpDefaultClause::Type::Firstprivate) ||
- "SHARED" >> pure(OmpDefaultClause::Type::Shared) ||
- "NONE" >> pure(OmpDefaultClause::Type::None)))
+ "PRIVATE" >> pure(OmpDefaultClause::DataSharingAttribute::Private) ||
+ "FIRSTPRIVATE" >>
+ pure(OmpDefaultClause::DataSharingAttribute::Firstprivate) ||
+ "SHARED" >> pure(OmpDefaultClause::DataSharingAttribute::Shared) ||
+ "NONE" >> pure(OmpDefaultClause::DataSharingAttribute::None)))
// 2.5 PROC_BIND (MASTER | CLOSE | PRIMARY | SPREAD)
TYPE_PARSER(construct<OmpProcBindClause>(
- "CLOSE" >> pure(OmpProcBindClause::Type::Close) ||
- "MASTER" >> pure(OmpProcBindClause::Type::Master) ||
- "PRIMARY" >> pure(OmpProcBindClause::Type::Primary) ||
- "SPREAD" >> pure(OmpProcBindClause::Type::Spread)))
+ "CLOSE" >> pure(OmpProcBindClause::AffinityPolicy::Close) ||
+ "MASTER" >> pure(OmpProcBindClause::AffinityPolicy::Master) ||
+ "PRIMARY" >> pure(OmpProcBindClause::AffinityPolicy::Primary) ||
+ "SPREAD" >> pure(OmpProcBindClause::AffinityPolicy::Spread)))
TYPE_PARSER(construct<OmpMapClause>(
applyFunction<OmpMapClause>(makeMobClause<true>,
@@ -311,9 +312,9 @@ TYPE_PARSER(construct<OmpDeviceClause>(
// device_type(any | host | nohost)
TYPE_PARSER(construct<OmpDeviceTypeClause>(
- "ANY" >> pure(OmpDeviceTypeClause::Type::Any) ||
- "HOST" >> pure(OmpDeviceTypeClause::Type::Host) ||
- "NOHOST" >> pure(OmpDeviceTypeClause::Type::Nohost)))
+ "ANY" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Any) ||
+ "HOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Host) ||
+ "NOHOST" >> pure(OmpDeviceTypeClause::DeviceTypeDescription::Nohost)))
// 2.12 IF (directive-name-modifier: scalar-logical-expr)
TYPE_PARSER(construct<OmpIfClause>(
@@ -432,9 +433,9 @@ TYPE_PARSER(construct<OmpLastprivateClause>(
// OMP 5.2 11.7.1 BIND ( PARALLEL | TEAMS | THREAD )
TYPE_PARSER(construct<OmpBindClause>(
- "PARALLEL" >> pure(OmpBindClause::Type::Parallel) ||
- "TEAMS" >> pure(OmpBindClause::Type::Teams) ||
- "THREAD" >> pure(OmpBindClause::Type::Thread)))
+ "PARALLEL" >> pure(OmpBindClause::Binding::Parallel) ||
+ "TEAMS" >> pure(OmpBindClause::Binding::Teams) ||
+ "THREAD" >> pure(OmpBindClause::Binding::Thread)))
TYPE_PARSER(
"ACQUIRE" >> construct<OmpClause>(construct<OmpClause::Acquire>()) ||
diff --git a/flang/lib/Parser/unparse.cpp b/flang/lib/Parser/unparse.cpp
index 192917512c17a2..58aaeb64d7ebc1 100644
--- a/flang/lib/Parser/unparse.cpp
+++ b/flang/lib/Parser/unparse.cpp
@@ -2820,9 +2820,9 @@ class UnparseVisitor {
WALK_NESTED_ENUM(InquireSpec::LogVar, Kind)
WALK_NESTED_ENUM(ProcedureStmt, Kind) // R1506
WALK_NESTED_ENUM(UseStmt, ModuleNature) // R1410
- WALK_NESTED_ENUM(OmpProcBindClause, Type) // OMP PROC_BIND
- WALK_NESTED_ENUM(OmpDefaultClause, Type) // OMP DEFAULT
- WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP DEFAULTMAP
+ WALK_NESTED_ENUM(OmpProcBindClause, AffinityPolicy) // OMP proc_bind
+ WALK_NESTED_ENUM(OmpDefaultClause, DataSharingAttribute) // OMP default
+ WALK_NESTED_ENUM(OmpDefaultmapClause, ImplicitBehavior) // OMP defaultmap
WALK_NESTED_ENUM(OmpVariableCategory, Value) // OMP variable-category
WALK_NESTED_ENUM(
OmpLastprivateClause, LastprivateModifier) // OMP lastprivate-modifier
@@ -2832,7 +2832,8 @@ class UnparseVisitor {
WALK_NESTED_ENUM(OmpTaskDependenceType, Value) // OMP task-dependence-type
WALK_NESTED_ENUM(OmpScheduleClause, Kind) // OMP schedule-kind
WALK_NESTED_ENUM(OmpDeviceClause, DeviceModifier) // OMP device modifier
- WALK_NESTED_ENUM(OmpDeviceTypeClause, Type) // OMP DEVICE_TYPE
+ WALK_NESTED_ENUM(
+ OmpDeviceTypeClause, DeviceTypeDescription) // OMP device_type
WALK_NESTED_ENUM(OmpReductionModifier, Value) // OMP reduction-modifier
WALK_NESTED_ENUM(OmpExpectation, Value) // OMP motion-expectation
WALK_NESTED_ENUM(OmpIfClause, DirectiveNameModifier) // OMP directive-modifier
diff --git a/flang/lib/Semantics/check-omp-structure.cpp b/flang/lib/Semantics/check-omp-structure.cpp
index b49258da506ce6..013dcbaf0b0daa 100644
--- a/flang/lib/Semantics/check-omp-structure.cpp
+++ b/flang/lib/Semantics/check-omp-structure.cpp
@@ -428,7 +428,7 @@ void OmpStructureChecker::HasInvalidLoopBinding(
for (const auto &clause : clauseList.v) {
if (const auto *bindClause{
std::get_if<parser::OmpClause::Bind>(&clause.u)}) {
- if (bindClause->v.v != parser::OmpBindClause::Type::Teams) {
+ if (bindClause->v.v != parser::OmpBindClause::Binding::Teams) {
context_.Say(beginDir.source, msg);
}
}
@@ -1644,7 +1644,7 @@ void OmpStructureChecker::Leave(const parser::OpenMPDeclareTargetConstruct &x) {
[&](const parser::OmpClause::DeviceType &deviceTypeClause) {
deviceTypeClauseFound = true;
if (deviceTypeClause.v.v !=
- parser::OmpDeviceTypeClause::Type::Host) {
+ parser::OmpDeviceTypeClause::DeviceTypeDescription::Host) {
// Function / subroutine explicitly marked as runnable by the
// target device.
deviceConstructFound_ = true;
diff --git a/flang/lib/Semantics/resolve-directives.cpp b/flang/lib/Semantics/resolve-directives.cpp
index 4f56356d879a40..573f216b848ad8 100644
--- a/flang/lib/Semantics/resolve-directives.cpp
+++ b/flang/lib/Semantics/resolve-directives.cpp
@@ -2023,16 +2023,16 @@ bool OmpAttributeVisitor::Pre(const parser::OpenMPAllocatorsConstruct &x) {
void OmpAttributeVisitor::Post(const parser::OmpDefaultClause &x) {
if (!dirContext_.empty()) {
switch (x.v) {
- case parser::OmpDefaultClause::Type::Private:
+ case parser::OmpDefaultClause::DataSharingAttribute::Private:
SetContextDefaultDSA(Symbol::Flag::OmpPrivate);
break;
- case parser::OmpDefaultClause::Type::Firstprivate:
+ case parser::OmpDefaultClause::DataSharingAttribute::Firstprivate:
SetContextDefaultDSA(Symbol::Flag::OmpFirstPrivate);
break;
- case parser::OmpDefaultClause::Type::Shared:
+ case parser::OmpDefaultClause::DataSharingAttribute::Shared:
SetContextDefaultDSA(Symbol::Flag::OmpShared);
break;
- case parser::OmpDefaultClause::Type::None:
+ case parser::OmpDefaultClause::DataSharingAttribute::None:
SetContextDefaultDSA(Symbol::Flag::OmpNone);
break;
}
diff --git a/flang/test/Parser/OpenMP/declare_target-device_type.f90 b/flang/test/Parser/OpenMP/declare_target-device_type.f90
index 40eb1c2fa4caee..b6903614a628ee 100644
--- a/flang/test/Parser/OpenMP/declare_target-device_type.f90
+++ b/flang/test/Parser/OpenMP/declare_target-device_type.f90
@@ -31,7 +31,7 @@ subroutine openmp_declare_target
end do
!PARSE-TREE: OpenMPDeclarativeConstruct -> OpenMPDeclareTargetConstruct
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Host
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Nohost
-!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> Type = Any
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Host
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Nohost
+!PARSE-TREE: OmpDeclareTargetSpecifier -> OmpDeclareTargetWithClause -> OmpClauseList -> OmpClause -> DeviceType -> OmpDeviceTypeClause -> DeviceTypeDescription = Any
END subroutine openmp_declare_target
diff --git a/flang/test/Parser/OpenMP/proc-bind.f90 b/flang/test/Parser/OpenMP/proc-...
[truncated]
|
kiranchandramohan
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LG.
tblah
left a comment
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Thanks!
The intent is to keep names in sync with the terminology from the OpenMP spec:
Add more comments with references to the OpenMP specs.